package be.xios.projectquiz.engine;

import java.io.Serializable;

import be.xios.projectquiz.game.Game;

/// <summary>
/// Deze klasse zorgt ervoor dat het spel en zijn update over de server
/// thread heen kunnen worden gedeeld over de verschillende threads.
/// </summary>
/// <author>Sebastian Kubski</author>
@SuppressWarnings("serial")
public class GameSettings implements Serializable {

	private Game game;
	private Game updatedGame;
	private int aangesproken = 0, finished=0;
	
	//Constructor
	public GameSettings() {
		this.game=null;
		this.updatedGame=null;
	}
	
	//Getters/Setters GAME
	public Game getGame() {
		return game;
	}

	public void setGame(Game game) {
		this.game = game;
	}

	//Getters/Setters updated GAME
	public Game getUpdatedGame() {
		return updatedGame;
	}

	public void setUpdatedGame(Game updatedGame) {
		this.updatedGame = updatedGame;
	}
	
	//Getters/Setters aanspreking
	public int getAangesproken() {
		return aangesproken;
	}

	public void setAangesproken(int aangesproken) {
		this.aangesproken = aangesproken;
	}
	//Getters/Setters finished
	public int getFinished() {
		return finished;
	}

	public void setFinished(int finished) {
		this.finished = finished;
	}

	/// <summary>
	/// Deze method controleert of elke speler en master (if needed) geupdated is geweest met een vernieuwd spel
	/// </summary>
	/// <author>Sebastian Kubski</author>
	public boolean iedereenUpdated(Game game) {
		int totalNeeded = (game.isMasterNeeded()) ? game.getSpelers() + 1 : game.getSpelers();
		
		if ( aangesproken == totalNeeded) {
			return true;
		}
		else {
			return false;
		}
	}
	
	/// <summary>
	/// Controle method voor succesvolle beeindiging van het spel  - jury included dit maal
	/// </summary>
	/// <author>Sebastian Kubski</author>
	public boolean iedereenFinished(Game game) {
		int totalNeeded = (game.isMasterNeeded()) ? game.getSpelers() + 2 : game.getSpelers() + 1;
		
		if ( finished == totalNeeded) {
			return true;
		}
		else {
			return false;
		}
	}	
}
